package blog.mapper;

import java.util.List;

import org.apache.ibatis.annotations.Param;

import blog.entity.Article;
import blog.entity.Category;
import blog.entity.Tag;

public interface ArticleMapper {
	/**
	 * 查询最近的n条文章
	 * @param n 条数
	 * @return  列表
	 */
	List<Article> listRecentArticle(Integer n);

	/**
	 * 根据id查询文章信息
	 * @param id
	 * @return
	 */
	Article getArticleById(Integer id);

	/**
	 * 查询所有的文章
	 * @return 文章列表
	 */
	List<Article> findAll();

	/**
	 * 	查询文章对应的分类id
	 * @param articleId--> 文章id
	 * @return 分类id集合  
	 */
	List<Integer> getCategoryListId(Integer articleId);
	
	/**
	 * 	查询文章对应的分类
	 * @param fid  大分类id
	 * @param sid  小分类id
	 * @return
	 */
	List<Category> getCategoryList(@Param("fid")Integer fid, @Param("sid")Integer sid);

	/**
	 * 	添加草稿
	 * @param article
	 * @return
	 */
	int insertDraftSubmit(Article article);

	/**
	 * 	添加文章信息到文章表
	 * @param article
	 */
	void addArticle(Article article);
	
	/**
	 * 	添加文章分类信息到文章分类表
	 * @param articleId 文章ID
	 * @param categoryId 分类ID
	 */
	void addArticleCategory(@Param("articleId") Integer articleId, @Param("categoryId") Integer categoryId);

	/**
	 * 	添加文章标签信息到文间标签表
	 * @param articleId 文章ID
	 * @param tagId 标签ID 
	 */
	void addArticleTag(@Param("articleId")  Integer articleId, @Param ("tagId") Integer tagId);

	/**
	 * 	查询文章对应的标签id
	 * @param articleId
	 * @return
	 */
	List<Integer> getTagListId(Integer articleId);
	
	/**
	 * 	查询标签id对应的标签
	 * @param tagIdList
	 * @return
	 */
	List<Tag> getTagList(List<Integer> tagIdList);

	/**
	 * 	修改文章信息到文章表
	 * @param article
	 */
	void updateArticle(Article article);

	/**
	 * 	删除文章对应的分类映射
	 * @param articleId
	 */
	void deleteArticleCategory(Integer articleId);
	
	/**
	 * 	删除文章对应的标签映射
	 * @param articleId
	 */
	void deleteArticleTag(Integer articleId);
	
	/**
	 * 	删除文章
	 * @param 文章id
	 * @return
	 */
	int deleteArticleById(@Param("articleId")Integer id);
}
